package com.itany;

import java.util.Arrays;
import java.util.Comparator;
import java.util.stream.Stream;

/**
 * Author：汤小洋
 * Date：2022-10-26 14:59
 * Description：<描述>
 */
public class Test09_中间操作 {
    public static void main(String[] args) {
        test3();
    }

    /**
     * 筛选与切片
     */
    public static void test1(){
        // 输出年龄大于29的员工
        Emp.getTestDate().stream()
                .filter(e -> e.getAge()>29)
                .forEach(System.out::println);
        System.out.println("--------------------------------------------------");

        // 取出集合中前3个元素
        Emp.getTestDate().stream()
                .limit(3)
                .forEach(System.out::println);
        System.out.println("--------------------------------------------------");

        // 跳过前15个元素，输出剩余的
        Emp.getTestDate().stream()
                .skip(15)
                .forEach(System.out::println);
        System.out.println("--------------------------------------------------");

        // 去除重复的元素
        Emp.getTestDate().stream()
                .distinct()
                .forEach(System.out::println);
        System.out.println("--------------------------------------------------");

    }

    /**
     * 映射
     */
    public static void test2(){
        // 提出员工的姓名，并输出
        Emp.getTestDate().stream()
                // .map(e -> e.getName())
                .map(Emp::getName)
                .forEach(System.out::println);
        System.out.println("--------------------------------------------------");

        // 统计所有员工姓名中使用的字符，并打印输出
        Emp.getTestDate().stream()
                .flatMap(e -> {
                    String name = e.getName();
                    String[] arr = name.split("");
                    return Stream.of(arr);
                })
                .distinct()
                .forEach(System.out::println);
        System.out.println("--------------------------------------------------");

        // 获取所有员工的年龄
        Emp.getTestDate().stream()
                .mapToInt(e -> e.getAge())
                .forEach(System.out::println);
        System.out.println("--------------------------------------------------");

    }

    /**
     * 排序
     */
    public static void test3(){
        int[] arr = {12,4,34,7,46,8,2,43};
        Arrays.stream(arr)
                .sorted()
                .forEach(System.out::println);
        System.out.println("--------------------------------------------------");

        // 按照员工的工资升序排序
        Emp.getTestDate().stream()
                .distinct()
                // .sorted((e1,e2) -> (int)(e1.getSalary()-e2.getSalary()))
                // .sorted(Comparator.comparing(Emp::getSalary)) // 升序
                .sorted(Comparator.comparing(Emp::getSalary).reversed()) // 降序
                .forEach(System.out::println);
        System.out.println("--------------------------------------------------");


    }
}
